草庐IT

C++ 对和指针

全部标签

c++ - 使用其指针从列表中删除项目

我有一个指针p(不是迭代器)指向列表中的一个项目。然后我可以使用p从列表中删除(删除)该项目吗?像这样的东西:mylist.erase(p);到目前为止,我只能通过遍历列表直到到达位置p处的项目,然后使用erase方法来完成此操作,该方法看起来效率很低。 最佳答案 不,您必须使用迭代器。我不明白为什么获取指针比获取迭代器更容易... 关于c++-使用其指针从列表中删除项目,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 将指向函数的指针分配给指向函数对象的指针的地址

在C++中可以吗?例如,我有一个指向不带参数且返回类型为void的函数的指针:void(*f)();和一个函数对象:classA{public:voidoperator()(){cout是否可以将A对象的地址分配给f?当我调用f()来调用A仿函数时?我试过了,但没用:#includeusingnamespacestd;classA{public:voidoperator()(){cout我得到了C:\Users\iuliuh\QtTests\functor_test\main.cpp:15:error:C2440:'=':cannotconvertfrom'A*'to'void(__c

c++ - 使用指向基抽象类的指针访问子类成员

classa//mybaseabstractclass{public:virtualvoidfoo()=0;};classb:publica//mychildclasswithnewmemberobject{public:voidfoo(){}intobj;};intmain(){bbee;a*ptr=&bee;ptr->obj;//ERROR:classahasnomembernamed"obj"}我的问题是,当我有一个指向子类(“b”)对象的基类(“a”)指针时,如何访问“obj”成员?我知道转换应该可以解决问题,但我正在寻找更好的解决方案。 最佳答案

c++ - 在 C++ 中递增 char 指针

为什么程序,char*s,*p,c;s="abc";printf("Element1pointedtobySis'%c'\n",*s);printf("Element2pointedtobySis'%c'\n",*s+1);printf("Element3pointedtobySis'%c'\n",*s+2);printf("Element4pointedtobySis'%c'\n",*s+3);printf("Element5pointedtobySis'%c'\n",s[3]);printf("Element4pointedtobySis'%c'\n",*s+4);给出以下结果?E

c++ - 函数指针比内联函数运行得更快。为什么?

我在我的计算机(Inteli3-3220@3.3GHz,Fedora18)上运行了一个基准测试,得到了意想不到的结果。函数指针实际上比内联函数快一点。代码:#include#includeinlineshorttoBigEndian(shorti){return(i>8);}short(*toBigEndianPtr)(shorti)=toBigEndian;intmain(){std::chrono::durationt;inttotal=0;for(inti=0;i>(end-begin);}std::cout编译为g++test.cpp-std=c++0x-O0“toBigEnd

c++ - 移动大型非指针基础对象的语义

当我阅读有关移动语义和右值引用的示例时,他们利用了右值引用的优势,并围绕包装指针的大对象移动语义例如12例如,他们只是复制移动对象内部的指针并将其设置为nullptr。(移动/交换)我的问题是,移动语义对于没有指针但很大的对象有任何优势(性能)吗?classBigClass{intdata[BIG_SIZE];inta01;...manymembers..intz99;public:moveconstructor?!}; 最佳答案 Domovesemanticshaveanyadvantageforobjectswhichdon't

c++ - 在不指定名称的情况下声明堆栈变量并获取指针

众所周知,用new定义一个堆变量得到指针而不指定名称:Var*p=newVar("name",1);但是我必须稍后在程序中使用deletep清除p指向的变量。我想声明一个堆栈变量,以便在函数退出后自动清除它,但我只想获取指针,以及以下内容:Varv("name",1);Var*p=&v;非常乏味,永远不会引用说明符v。我可以声明一个堆栈类实例并在不指定其名称的情况下获取它的指针吗? 最佳答案 这里隐藏着两个问题。第一个是:Var*p=newVar("name",1);ButIhavetoclearthevariablepointed

c++ - 使用整数指针作为唯一 ID 有多糟糕? C++11

我有一个类,在实例化时需要获得一些唯一的ID才能工作。最初我想使用一个分配和递增的静态函数。我不需要它们连续,只需要唯一。classA{intid_1;intid_2;intid_3;public:staticintlast_id=0;staticintget_id(){returnA::last_id++;}...A(){id_1=A::get_id();id_2=A::get_id();id_3=A::get_id();}};现在,我正在考虑使用多线程。我认为静态函数将是一个瓶颈,因为一开始我正在构建这些对象的几十万个实例。在程序结束之前我不会销毁任何实例,因此在初始化之后它们是固

C++使用相同的代码循环遍历对象和指针

所以我有两个容器setvector是否有任何方法可以修改以下转换lambda代码,以便可以使用任一容器?transform(container.begin(),container.end(),back_inserter(data),[](constPerson*p){returnPairResults(p->getTime(),p->getName());});现在我只能让它在vector上工作。谢谢。>>SolutionCodeHere非常感谢安德鲁在这方面的帮助! 最佳答案 您可以使用函数重载的小技巧来实现:定义两个函数来生成指

c++ - 如果我们将 std::cout 应用于指向成员的指针,我们将收到什么值

我们可以通过应用获取位于内存中的对象的地址表示std::cout我正在尝试对指向成员的指针类型执行相同的操作。#includeusingnamespacestd;structX{boolb;inta;};intX::*a=&X::a;boolX::*b=&X::b;Xx;intmain(){coutDEMO你看我收到了1。1是什么?或者我必须提到一个pointer-to-member只是一种不直接绑定(bind)到“只是”指针的类型吗? 最佳答案 因为operator没有过载直接指向成员的指针,a和b隐式转换为bool,存在过载。该